package intfns

import (
	

	
	
)

func boolean( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	if ,  := [0].(tree.IsBool);  {
		return .Bool(), nil
	}

	return nil, fmt.Errorf("Cannot convert object to a boolean")
}

func not( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	,  := [0].(tree.IsBool)
	if ! {
		return nil, fmt.Errorf("Cannot convert object to a boolean")
	}
	return !.Bool(), nil
}

func _true( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	return tree.Bool(true), nil
}

func _false( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	return tree.Bool(false), nil
}

func lang( tree.Ctx,  ...tree.Result) (tree.Result, error) {
	 := [0].String()

	var  tree.Elem

	for ,  := range .NodeSet {
		if .GetNodeType() == tree.NtElem {
			 = .(tree.Elem)
		} else {
			 = .GetParent()
		}

		for .GetNodeType() != tree.NtRoot {
			if ,  := tree.GetAttribute(, "lang", tree.XMLSpace);  {
				return checkLang(, .Value), nil
			}
			 = .GetParent()
		}
	}

	return tree.Bool(false), nil
}

func checkLang(,  string) tree.Bool {
	 := language.Make()
	,  := .Region()

	 := language.Make()
	,  := .Region()

	if  == language.Exact &&  != language.Exact {
		return tree.Bool(false)
	}

	if  !=  &&  == language.Exact &&  == language.Exact {
		return tree.Bool(false)
	}

	, ,  := language.NewMatcher([]language.Tag{}).Match()
	return tree.Bool( >= language.High)
}